package com.example._2025_03_29;

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@RequestMapping("/demo")
@RestController
public class DemoController {
    @RequestMapping(value = "/demo1", method = {RequestMethod.GET, RequestMethod.POST})
//    get 和 post 全部支持
    public String demo1() {
        return "demo1";
    }
    @GetMapping("/demo2")
//    /都加上，是一种规范
    public String demo2() {
        return "demo2";
    }
    @PostMapping("/demo3")
    public String demo3() {
        return "demo3";
    }
    @RequestMapping("/demo4")
//    进行后端参数的重命名
    public String demo4(@RequestParam(value = "name", required = false) String username, String password) {
        return "username: " + username + ", password: " + password;
    }

    /*
        传递对象
     */
    @RequestMapping("/demo5")
    public String demo5(UserInfo userInfo) {
        return "接收到的参数为: " + userInfo;
    }

    /*
        传递数组
     */
    @RequestMapping("/demo6")
    public String demo6(String[] arr) {
        return Arrays.toString(arr);
    }

    /*
        传递集合
        不加注解的话，默认是封装成数组的，要想是一个集合，得加注解
     */
    @RequestMapping("/demo7")
    public String demo7(@RequestParam("list") List<String> list) {
        return list.toString();
    }
    /*
        传递 JSON 格式数据
     */
    @RequestMapping("/demo8")
    public String demo8(@RequestBody UserInfo userInfo) {
        return userInfo.toString();
    }
    /*
        @PathVariable 注解: 获取 URL 中的参数值
        占位符
        可以设置多个
     */
    @RequestMapping("/demo9/{articleId}")
    public String demo9(@PathVariable("articleId") Integer articleId) {
        return "接收到的参数: " + articleId;
    }

    /*
        上传文件
     */
    @RequestMapping("/demo10")
    public String demo10(@RequestPart("file") MultipartFile file) throws IOException {
        System.out.println(file.getName());
        System.out.println(file.getOriginalFilename());
        System.out.println(file.getContentType());
        file.transferTo(new File("D:/桌面" + file.getOriginalFilename()));
        return "接收到的文件: " + file.getOriginalFilename();
    }
}
